/*****************************************************************************
*
*  @file     AdcDriver.c
*  @brief    ADC采样驱动
*            1. 负责实现ADC采样
*			 2. 负责实现为各个模块提供ADC采样原始值
*
*  @author   潘学林
*  @email                                        
*  @version  V0.000
*  @date     2022/4/11
*  @license  /
*----------------------------------------------------------------------------*
*  Remark         : Description                                              *
*----------------------------------------------------------------------------*
*  Change History :                                                          *
*  <Date>     | <Version> | <Author>       | <Description>                   *
*----------------------------------------------------------------------------*
*  2022/4/11  | 0.000     | 潘学林         | 创建文件                        *
*----------------------------------------------------------------------------*
*
*****************************************************************************/

#ifndef _ADCDRIVER_H_
#define _ADCDRIVER_H_

/* Includes ------------------------------------------------------------------*/

#include "Std_Types.h" 
#include "gd32f30x.h"
#include "systick.h"

/* Micros/Enumerate/Structures -----------------------------------------------*/

/**
 * @brief 引脚定义
 */
/* ADC01_1 */
#define AFE1_NTC4_AD_Pin GPIO_PIN_1
#define AFE1_NTC4_AD_Port GPIOA
/* ADC01_2 */
#define AFE1_NTC5_AD_Pin GPIO_PIN_2
#define AFE1_NTC5_AD_Port GPIOA
/* ADC01_3 */
#define AFE1_NTC6_AD_Pin GPIO_PIN_3
#define AFE1_NTC6_AD_Port GPIOA

/* ADC01_7 */
#define AFE2_NTC4_AD_Pin GPIO_PIN_7
#define AFE2_NTC4_AD_Port GPIOA
/* ADC01_8 */
#define AFE2_NTC5_AD_Pin GPIO_PIN_0
#define AFE2_NTC5_AD_Port GPIOB
/* ADC01_9 */
#define AFE2_NTC6_AD_Pin GPIO_PIN_1
#define AFE2_NTC6_AD_Port GPIOB

/* ADC01_4 */
#define NTC1_AD_Pin GPIO_PIN_4
#define NTC1_AD_Port GPIOA
/* ADC01_5 */
#define PACK_ID_AD_Pin GPIO_PIN_5   //NTC2_AD_Pin
#define PACK_ID_AD_Port GPIOA       //NTC2_AD_Port

/* ADC01_10 */
#define VB_72V_AD_Pin GPIO_PIN_0
#define VB_72V_AD_Port GPIOC
/* ADC01_11 */
#define VCC_3V3_PR_AD_Pin GPIO_PIN_1
#define VCC_3V3_PR_AD_Port GPIOC
/* ADC01_14 */
#define A_POSITIVE_AD_Pin GPIO_PIN_4
#define A_POSITIVE_AD_Port GPIOC
/* ADC01_15 */
#define CC2_AD_Pin GPIO_PIN_5
#define CC2_AD_Port GPIOC

/* 滤波缓冲区长度 */
#define ADC_SAMPLE_FILTER_BUFF_LENGTH 5
/* 采样周期，单位：ms */
#define ADC_SAMPLE_INTERVAL 1

/**
 * @brief 采样类型
 * @note  None
 */
typedef enum ADC_SAMPLE_TYPE
{
    AFE1_NTC4_AD = 0, /* AFE1 NTC4 温度 */
    AFE1_NTC5_AD = 1, /* AFE1 NTC5 温度 */
    AFE1_NTC6_AD = 2, /* AFE1 NTC6 温度 */
    AFE2_NTC4_AD = 3, /* AFE2 NTC4 温度 */
    AFE2_NTC5_AD = 4, /* AFE2 NTC5 温度 */
    AFE2_NTC6_AD = 5, /* AFE2 NTC6 温度 */
    NTC1_AD = 6, /* 分流器温度 */
    PACK_ID_AD = 7, /* PACK_ID电阻识别 */
    VB_72V_AD = 8, /* 电池总压 */
    VCC_3V3_PR_AD = 9, /* 3.3V防反后电压 */
    A_POSITIVE_AD = 10, /* 快充A+电压 */
    CC2_AD = 11, /* 快充CC2电压 */
    ADC_SAMPLE_TYPE_MAX = 12, /* 采样类型总数 */
}ADC_SAMPLE_TYPE;

/* Variables -----------------------------------------------------------------*/

/**
 * @brief ADC采样控制信息
 */
typedef struct ADC_SAMPLE_DRIVER_CTRL_INFO
{
	uint16 adcSampleValue[ADC_SAMPLE_TYPE_MAX]; /* 实时采样值 */
}ADC_SAMPLE_DRIVER_CTRL_INFO; 

/* Functions -----------------------------------------------------------------*/

/*****************************************
* 接口函数
*****************************************/

/**
  * @brief  充电继电器驱动初始化
  * @param  None
  * @retval None
  */
void AdcDriver_Init(void);

/**
  * @brief  轮询任务
  * @param  None
  * @retval None
  */
void AdcDriver_PollTask(void);

/**
  * @brief  获取ADC原始采样结果
  * @param  type 类型，result 结果
  * @retval None
  */
void AdcDriver_GetAdcSampleValue(ADC_SAMPLE_TYPE type,uint16 *result);

/**
  * @brief  获取ADC采样结果缓冲区首地址
  * @param  None
  * @retval 缓冲区首地址
  */
uint16 *AdcDriver_GetAdcSampleBuffAddr(void);

#endif

/********************************* END OF FILE ********************************/

